
// use std::sync::{Arc, Mutex};
// fn main() {
//  let data = Arc::new(Mutex::new(0));
//  let mut handles = vec![];

//  for _ in 0..10 {
//      let data = Arc::clone(&data);
//      let handle = std::thread::spawn(move || {
//          let mut data = data.lock().unwrap();
//          println!("Thread {:?} has data: {}", std::thread::current().id(), *data);
//          *data += 1;
//      });
//      handles.push(handle);
//  }
//  for handle in handles {
//      handle.join().unwrap();
//  }

// }

// 返回的引用来自 data，与 config 无关

#[derive(Debug)]
struct Config {
    a: String,
    b: String,
}

static mut config: Option<&mut Config> = None;

fn init() ->Option<&'static mut Config> {
   Some(Box::leak(Box::new( Config { a: "a".to_string(), b: "v".to_string() })))
}
fn main() {
    unsafe {
        config = init();
        println!("{:?}", config);
    }
}